package com.eric.utils;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import cn.hutool.core.bean.BeanUtil;
import com.eric.domain.dto.LocationDto;
import com.eric.service.ILocationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

@Component
@RequiredArgsConstructor
public class PublicTools {

    //    通过userService获取到真是名称用于equipment中的create_by和last_update_by
    private final ILocationService locationService ;

    public  String getLocation(){
        Object loginId = StpUtil.getLoginId();
        int userId = Integer.parseInt(loginId.toString());
        SaResult allByUserIdService = locationService.getAllByUserIdService(userId, null, null);
        LocationDto locationDto = BeanUtil.copyProperties(allByUserIdService, LocationDto.class);
      return   locationDto.getLocationAddress();
    }

//   todo 获取到当前登录用户的角色列表，并通过列表来判定返回的是ture或者false,用作控制接口中mybatisPlus中查询方法的condition
//    这里写死了四个角色，后期调整，动态变化
    public static boolean checkLoginRole(){
        List<String> roleList = StpUtil.getRoleList();
        return hasAnyCommonElement(roleList, Arrays.asList("sys:admin", "sys:manager", "sys:superAdmin", "sys:coder"));
    }

//   todo 获取到当前登录用户的权限列表，并通过列表来判定返回的是ture或者false,用作控制接口中mybatisPlus中查询方法的condition
//    这里写死了是个权限，后期调整，动态变化
    public static boolean checkLoginPermission(){
        List<String> permissionList = StpUtil.getRoleList();
        for (String permission : permissionList) {
            if (permission.equals("sys:add") || permission.equals("sys:delete") || permission.equals("sys:modify") || permission.equals("sys:search")) {
                return false;
            }
        }
        return true;
    }

    //    一个集合中任何一个元素在另外一个集合中，即判定为true，否则为false
    public static <T> boolean hasAnyCommonElement(List<T> list1,List<T> list2){
        for (T element : list1) {
            if (list2.contains(element)) {
                return true;
            }
        }
        return false;
    }


}
